/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tbp.controle;

import br.com.tbp.exception.PersistenciaException;
import br.com.tbp.model.domain.Consultor;
import br.com.tbp.model.domain.Supervisor;
import br.com.tbp.model.domain.constant.CondicaoDaLinha;
import br.com.tbp.model.domain.constant.TipoDeProduto;
import br.com.tbp.persitence.GerenciadorDeConexao;
import br.com.tbp.utils.ImageUtils;
import br.com.tbp.utils.ReportUtils;
import java.awt.Dialog.ModalExclusionType;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author Diego
 */
public class ControleRelatorio {

    private static Connection conn;

    public static void consultores() throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_IMAGEM", ImageUtils.createIconURL("acriel-marca.png"));
            JasperPrint print = JasperFillManager.fillReport(
                    ReportUtils.getRelatorio("consultores.jasper"), mapa, conn);

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Relatório de Consultores");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void entradaDeLinhas(Date inicio, Date fim) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            ControlePedido controle_pedido = new ControlePedido();
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_IMAGEM", ImageUtils.createIconURL("acriel-marca.png"));
            mapa.put("PAR_DATA_INICIO", inicio);
            mapa.put("PAR_DATA_FIM", fim);
            mapa.put("PAR_TOTAL_LINHAS_NOVAS",
                    controle_pedido.buscaTotalPorCondicao(CondicaoDaLinha.PRIMEIRA_VENDA, inicio, fim));
            mapa.put("PAR_TOTAL_ADITIVOS",
                    controle_pedido.buscaTotalPorCondicao(CondicaoDaLinha.ADITIVO, inicio, fim));
            mapa.put("PAR_TOTAL_LINHAS_RENEGOCIADAS",
                    controle_pedido.buscaTotalPorCondicao(CondicaoDaLinha.RENEGOCIACAO, inicio, fim));
            mapa.put("PAR_TOTAL_PORTABILIDADE", controle_pedido.buscaTotalPortIn(inicio, fim));
            JasperPrint print = JasperFillManager.fillReport(
                    ReportUtils.getRelatorio("entrada_linhas.jasper"), mapa, conn);

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Relatório de Entrada de Linhas");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } catch (PersistenciaException pex) {
            System.out.println(pex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void rankingDePedidos(Date inicio, Date fim) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_IMAGEM", ImageUtils.createIconURL("acriel-marca.png"));
            mapa.put("PAR_DATA_INICIO", inicio);
            mapa.put("PAR_DATA_FIM", fim);
            JasperPrint print = JasperFillManager.fillReport(
                    ReportUtils.getRelatorio("ranking_pedidos.jasper"), mapa, conn);

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Relatório de Entrada de Pedidos");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void rankingDeProdutos(Date inicio, Date fim, TipoDeProduto tipo, Supervisor supervisor) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_IMAGEM", ImageUtils.createIconURL("acriel-marca.png"));
            mapa.put("PAR_DATA_INICIO", inicio);
            mapa.put("PAR_DATA_FIM", fim);
            JasperPrint print = null;
            if (supervisor.getId() <= 0) {
                switch (tipo) {
                    case LINHA:
                        print = JasperFillManager.fillReport(ReportUtils.getRelatorio("ranking_entrada_linhas.jasper"), mapa, conn);
                        break;
                    case MODEM:
                        print = JasperFillManager.fillReport(ReportUtils.getRelatorio("ranking_entrada_modem.jasper"), mapa, conn);
                        break;
                }
            } else {
                mapa.put("PAR_ID_SUPERVISOR", supervisor.getId());
                switch (tipo) {
                    case LINHA:
                        print = JasperFillManager.fillReport(ReportUtils.getRelatorio("ranking_entrada_linhas_supervisor.jasper"), mapa, conn);
                        break;
                    case MODEM:
                        print = JasperFillManager.fillReport(ReportUtils.getRelatorio("ranking_entrada_modem_supervisor.jasper"), mapa, conn);
                        break;
                }
            }

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Relatório Ranking de Entrada de Produtos");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void produtividade(Date inicio, Date fim, CondicaoDaLinha condicao) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_IMAGEM", ImageUtils.createIconURL("acriel-marca.png"));
            mapa.put("PAR_DATA_INICIO", inicio);
            mapa.put("PAR_DATA_FIM", fim);
            mapa.put("PAR_CONDICAO", condicao.name());
            JasperPrint print = JasperFillManager.fillReport(
                    ReportUtils.getRelatorio("produtividade.jasper"), mapa, conn);

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Relatório Produtividade");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void planilhaProducaoBoc(Date dataInput, long bocId) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_DATA", dataInput);
            mapa.put("PAR_ID_BOC", bocId);
            JasperPrint print = JasperFillManager.fillReport(
                    ReportUtils.getRelatorio("boc.jasper"), mapa, conn);
            try {
                JasperExportManager.exportReportToPdfFile(print, "planilha_boc.pdf");
                java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
                desktop.open(new File("planilha_boc.pdf"));
            } catch (FileNotFoundException fnfex) {
                JOptionPane.showMessageDialog(null, "A planilha não pode ser exibida,\nfeche os arquivos (pdf) e tente novamente.",
                        "Aviso", JOptionPane.ERROR_MESSAGE);
                return;
            } catch (IOException ioex) {
                System.out.println(ioex.getMessage());
            }
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void listaAniversariantes(int mes) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_MES", mes);
            JasperPrint print = JasperFillManager.fillReport(
                    ReportUtils.getRelatorio("aniversariantes.jasper"), mapa, conn);

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Relatório Aniversariantes");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void emitirAjudaCusto(Date inicio, Date fim) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_DATA_INICIO", inicio);
            mapa.put("PAR_DATA_FIM", fim);
            mapa.put("SUBREPORT_1", ReportUtils.getRelatorio("ajuda_custo_subreport2.jasper"));
            JasperPrint print = JasperFillManager.fillReport(
                    ReportUtils.getRelatorio("ajuda_custo.jasper"), mapa, conn);

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Relatório de Ajuda de Custo");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }

    public static void reportVisita(Date inicio, Date fim, Consultor consultor) throws PersistenciaException {
        conn = GerenciadorDeConexao.abreConexao();
        try {
            Map<String, Object> mapa = new HashMap<String, Object>();
            mapa.put("PAR_DATA_INICIO", inicio);
            mapa.put("PAR_DATA_FIM", fim);
            if (consultor.getId() > 0) {
                mapa.put("PAR_ID_CONSULTOR", consultor.getId());
            }
            JasperPrint print = JasperFillManager.fillReport(consultor.getId() <= 0
                    ? ReportUtils.getRelatorio("report_visita_periodo.jasper")
                    : ReportUtils.getRelatorio("report_visita_periodo_consultor.jasper"),
                    mapa, conn);

            JasperViewer viewer = new JasperViewer(print, false);
            viewer.setTitle("Acriel Consultoria - Visitas");
            viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
            viewer.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
            viewer.setVisible(true);
        } catch (JRException jrex) {
            System.out.println(jrex.getMessage());
        } finally {
            GerenciadorDeConexao.fechaConexao(conn);
        }
    }
}
